package com.cskaoyan.javase.oop3._0abstract._2notice;

/**
 * abstract关键字的使用注意事项
 * 1.abstract关键字不能用于声明变量,代码块等结构
 *      只能用来声明类和方法
 *
 * 2.abstract在修饰方法时,是任何方法都能够修饰吗?
 *      抽象方法定义出来的目的就是为了重写的
 *      所以所有不能被重写的方法都是不能声明为抽象的,包括:
 *          a.final修饰的方法(语义本身就表示不能被重写,但是可以继承)
 *          b.private私有方法(可以继承,但是没有访问权限,所以不能重写)
 *          c.静态方法(不能继承,更不能重写)
 *          d.构造方法(不能继承,更不能重写)
 *
 * 3.一个抽象类中可以没有抽象方法，但是意义不是很大（普遍来说，抽象类就应该有抽象方法）
 * 4.abstract修饰类时，类的修饰符不能有final。
 *
 * @since 17:10
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // Son s = new Son();
        // s.test();
    }
}

class Father {
    // Illegal combination of modifiers: 'abstract' and 'final'
    // abstract final void test() {
    // }
}

class Son extends Father {
    // test();
}

abstract class AbstractFather {
    // static abstract void test();
}